//#include <iostream>



















//using namespace std;
//const int N = 1e4 + 10;
//int a[N], b[N];
//int n;
//
//int main() {
//	cin >> n;
//	for (int i = 0; i < n; i++) {
//		int x, y;
//		cin >> x >> y;
//		a[i] = x / y;
//		b[i] = x / (y + 1) + 1;
//	}
//	int mi = a[0], ma = b[0];
//	for (int i = 1; i < n; i++) {
//		mi = min(a[i], mi);
//		ma = max(b[i], ma);
//	}
//
//	cout << ma << " " << mi << endl;
//	return 0;
//}
//
//#include <iostream>
//#include <cstring>
//#include <vector>
//using namespace std;
//int vis[15];
//int t;
//int n;
//int flag;
//
//struct trip {
//	int l, r, t;
//} p[15];
//
//void dfs(int u, int now) {
//	if (u == n) {
//		return ;
//		flag = 1;
//	}
//
//	for (int i = 1; i <= n; i++) {
//		if (vis[i] == 1) {
//			continue ;
//		}
//
//		if (p[i].r < now) {
//			return ;
//		}
//		if (vis[i] == 0) {
//			vis[i] = 1;
//			if (p[i].l <= now) {
//				dfs(u + 1, now + p[i].t);
//			} else {
//				dfs(u + 1, p[i].l + p[i].t);
//			}
//			vis[i] = 0;
//		}
//	}
//}
//
//int main() {
//
//	cin >> t;
//	memset(vis, 0, sizeof vis);
//	while (t--) {
//		flag = 0;
//		cin >> n;
//		int k;
//		for (int i = 1; i <= n; i++) {
//			cin >> p[i].l >> k >> p[i].t;
//			p[i].r = k + p[i].l;
//		}
//		for (int i = 1; i <= n; i++) {
//			vis[i] = 1;
//			dfs(1, p[i].l + p[i].t);
//			vis[i] = 0;
//		}
//
//		if (flag)
//			cout << "YES" << endl;
//		else
//			cout << "NO" << endl;
//	}
//	return 0;
//}


#include <iostream>
#include <vector>
using namespace std;
vector<int>a, b;
long long cnt;

int main() {
	int n;
	cin >> n;
	string s;
	cin >> s;
	getchar();
	char ch1, ch2;
	scanf("%c %c", &ch1, &ch2);

	for (int i = 0; i < s.size(); i++) {
		if (s[i] == ch1) {
			a.push_back(i);
		}
		if (s[i] == ch2) {
			b.push_back(i);
		}
	}

	for (int i = 0; i < a.size(); i++) {
		for (int j = 0; j < b.size(); j++) {
			if (b[j] - a[i] >= n-1) {
				cnt += b.size() - j;
				break;
			}
		}
	}

	cout << cnt << endl;
	return 0;
}


